package org.ipower.financial.dao;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import org.hibernate.SessionFactory;

/**
 * 基础数据库操作接口。
 * @author young。
 * @since 2013-08-18。
 * */
public interface IDao<T> {
	/**
	 * 设置sessionFactory。
	 * @param sessionFactory
	 * 	sessionFactory对象。
	 * */
	public void setSessionFactory(SessionFactory sessionFactory);
	/**
	 * 加载对象。
	 * @param c 
	 * 	对象类型。
	 * @param id
	 * 	主键。
	 * @return
	 * 	对象。 
	 * */
	public T load(Class<T> c, Serializable id);
	/**
	 * 删除对象。
	 * @param o 
	 * 	删除对象。
	 * */
	public void delete(T o);
	/**
	 * 保存对象。
	 * @param o 
	 * 	保存对象。
	 * */
	public void save(T o);
	/**
	 * 更新对象。
	 * @param o 
	 * 	更新对象。
	 * */
	public void update(T o);
	/**
	 * 保存或更新对象。
	 * @param o 
	 * 	对象。
	 * */
	public void saveOrUpdate(T o);
	/**
	 * 查询数据(带分页)。
	 * @param hql 
	 * 	HQL语句。
	 * @param params 
	 * 	参数对象集合。
	 * @param page 
	 * 	查询第几页。
	 * @param rows 
	 * 	每页显示数据记录。
	 * @return 
	 * 	结果集合。
	 * */
	public List<T> find(String hql,Map<String,Object> params,Integer page,Integer rows);
	/**
	 * select count(*) from 类。
	 * @param hql
	 * 	HQL语句。
	 * @param params
	 * 	参数对象集合。
	 * @return 
	 * 	数据量。
	 * */
	public Long count(String hql,Map<String,Object> params);
	/**
	 * 执行HQL语句。
	 * @param hql
	 * 	HQL语句。
	 * @param params
	 * 	参数对象集合。
	 * @return 
	 * 	响应数目。
	 * */
	public Integer executeHql(String hql,Map<String,Object> params);
}